package base.generic.demo04;

/**
 * 	泛型的递归类型限制。<br>
 *	定义泛型接口，接口只是功能，可以通过泛型来限定哪些对象可以使用MinMax这个接口。<br>
 *  首先，定义个限定指定类T使用的能够得到其最大（max）和最小(min)值的接口MinMax；<br>
 *  其次，T类要能够比较大小，就得实现java.lang.Comparable接口（通过重写比较规则compareTo()
 *  来实现自己的业务比较逻辑）<br>
 *  最后，因为T已经实现Comparable接口，因此可以提供个实现类，将min()和max()方法实现<br>
 *
 *	T extends Comparable说明T是需要实现Comparable接口的，是可比较的。注意不是T implements Comparable
 *	这种格式。<br>
 *	Comparable<T>说明两个可比较的对象必须都是T类型，这样就避免在compareTo()方法里面
 *	还要进行类型判断及强制转换为T类型，这里使用的是递归调用。
 * 所谓的递归：就是我这里MinMax接口可以在使用时限定对某个类型T进行处理，同时，T要为了能够实现比较，就得实现
 * Comparable接口，Comparable接口在使用时也可以限定对某个类型可以进行比较，刚好和T类型的逻辑相同，因此将T
 * 传递给Comparable作为限定类型，这就是泛型的递归类型限制，
 */
public interface MinMax<T extends Comparable<T>> {
    T min();
    T max();
}
